package com.itheima.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.itheima.bean.ShoppingCart;
import com.itheima.common.BaseContext;
import com.itheima.common.R;
import com.itheima.service.ShoppingCartService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RequestMapping("/shoppingCart")
@RestController
public class ShoppingCartController {

    @Autowired
    private ShoppingCartService shoppingCartService;

    /**
     * 查询当前登录用户购物车商品数据
     * @return
     */
    @GetMapping("/list")
    public R<List<ShoppingCart>> list(){
        //1.从ThreadLocal中获取当前登录用户id
        Long userId = BaseContext.getCurrentId();

        //2.调用service完成查询当前登录用户购物车数据
        LambdaQueryWrapper<ShoppingCart> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(ShoppingCart::getUserId,userId);
        List<ShoppingCart> list = shoppingCartService.list(wrapper);

        //3.返回用户购物车数据
        return R.success(list);
    }

    /**
     * 当前登录用户添加商品到购物车
     * @param cart
     * @return
     */
    @PostMapping("/add")
    public R<ShoppingCart> add(@RequestBody ShoppingCart cart){
        //1.补齐字段 【当前商品属于哪个用户的购物车】
        Long userId = BaseContext.getCurrentId();
        cart.setUserId(userId);

        //2.根据用户id和商品的菜品id|套餐id去购物车中查询是否存在
        //同一用户下的相同商品存在就数量+1，不存在数量就为1
        LambdaQueryWrapper<ShoppingCart> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(ShoppingCart::getUserId,cart.getUserId());
        if(cart.getDishId()!=null){
            //说明添加到购物车的商品是菜品
            wrapper.eq(ShoppingCart::getDishId,cart.getDishId());
            //之所以做口味非空判断  是因为有些菜品没有口味信息  有口味信息就需要跟上口味信息一起查询 没有就相当于只使用菜品id查询是否购物车中已经存在
            wrapper.eq(cart.getDishFlavor()!=null,ShoppingCart::getDishFlavor,cart.getDishFlavor());
        }else{
            //说明添加到购物车的商品是套餐
            wrapper.eq(ShoppingCart::getSetmealId,cart.getSetmealId());
        }

        ShoppingCart one = shoppingCartService.getOne(wrapper);
        if(one!=null){
            //说明当前用户购物车中已经存在这个商品            设置数量+1
            one.setNumber(one.getNumber()+1);
        }else{
            //one == null ：说明当前用户下不存在这个商品     设置数量为1
            one = cart;
            one.setNumber(1);
        }

        //3.将添加到购物车的商品保存到shopping_cart表中
        shoppingCartService.saveOrUpdate(one);   //会根据id自动判断：如果id存在：就执行更新  id不存在：执行新增

        //4.返回购物车中新添加的商品信息
        return R.success(one);
    }

    /**
     * 清空购物车
     */
    @DeleteMapping("/clean")
    public R<String> clean(){
        //1.从ThreadLocal中获取当前登录用户id
        Long userId = BaseContext.getCurrentId();

        //2.调用service完成根据用户id删除购物车表中数据
        LambdaQueryWrapper<ShoppingCart> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(ShoppingCart::getUserId,userId);
        boolean flag = shoppingCartService.remove(wrapper);

        //3.返回清空购物车成功
        return flag?R.success("清空购物车成功！"):R.error("清空购物车失败！");
    }

    //购物车的商品减少
    @PostMapping("/sub")
    public R sub(@RequestBody ShoppingCart shoppingCart){

        shoppingCart = shoppingCartService.sub(shoppingCart);

        return R.success(shoppingCart);


    }
}
